לקחתי על עצמי פרויקט לנסות לבנות מין ספרייה לעבודה עם מסד נתונים. בסיסית, לא יותר מדי מסובכת.
חלק מהבנייה זה קודם לחשוב על דרך הפעולה, אז אמרתי ננסה לקרוא איך אחרים עושים את זה(ORMs ופריימוורקים) ואז נגבש דרך משלי.
קראתי כמה אפשרויות , כמו ACTIVE RECORD והדרך של ZEND FRAMEWORK ולא הבנתי כל כך ויש לי כמה שאלות..
1. בZEND רואים במחלקת טבלה שיש לו מתודה שמקבלת את כל השורות, בעצם את כל הטבלה, ואז הוא מבצע פעולות על כל שורה בנפרד. זה לא בזבוז משאבים ? להוציא את כל השורות, להפוך אותן לאובייקט, לבצע עליהן פעולות ? וכשהוא שומר, הוא שומר את השורה שביצעו עליה פעולה כלשהי, או שהוא פשוט מכניס את כל השורות מחדש? כי אז זה בכלל בזבוז משאבים מטורף.
לא יותר פשוט להוציא רק את השורה שמדברים עליה כל פעם ? במקום להכניס כל טבלה לתוך אובייקט שמכיל המון אובייקטים של שורות שבתוך הטבלה ? או יותר פשוט, להוציא רק את העמודה\עמודות שמדברים עליה? כי לא תמיד מדברים על שורה שלמה..
2. לא הבנתי מה ההבדל בין הAR לבין הDATA MAPPER..שניהם דרכים להציג את המסד כאובייקט לא?

5 תשובות

avatar ענה Splash ב 09 למרץ 2015 #

1.אני חושב שלא הבנת את מה שהקוד עושה אבל כדי לא להטעות אתה תצטרך להציג פה את הקוד שאתה מדבר עליו
2.ההבדל העיקרי ביניהם הוא ש Data Mapper לא מתקשר עם ה DB והחלק של השמירה נעשה באמצעות מחלקה אחרת לעומת Active Record שהאוביקט קשור ישירות ל DB ואז לאותו אוביקט יש מתודה שמירה של השינויים שעשית.

אם אתה רוצה להרחיב טיפה יותר - http://russellscottwalker.blogspot.co.il/2013/10/active-record-vs-data-mapper.html

avatar ענה משהה ב 09 למרץ 2015 #

1. תראה http://www.i-dev.co.il/Guide/73 , יש מודל טבלה שמקושר למודל שורה. המודל טבלה עובר על השורות בטבלה והופך אותן למודל שורה.
2. לא הבנתי, מה זה לא מתקשר עם הdb? אז איך הוא קורא וכותב בו ?

avatar ענה Splash ב 09 למרץ 2015 #

1.זה שמישהו כתב מדריך והוא מסביר לעשות ככה לא אומר שזה נכון,יש הרבה שטויות שכתובות בעברית ולכן אם אתה מחפש איך עושים משהו עדיף שתפנה למקור רשמי - http://framework.zend.com/manual/current/en/index.html

בדיקה בתיעוד הרשמי של הפריימוורק בהחלט מראה שיש הפרדה בין ה table ל row.לגבי השליפה אני משאר שזה היה חלק מהמדריך לשלוף את כל הטבלה,בפועל אם יהיה לך כמה אלפי משתמשים אתה בחיים לא תרצה לשלוף את כולם ביחד,גם מבחינת יעילות וגם מבחינת נוחות.

במקרה של ה save - הוא מעדכן כל אחד בנפרד אבל אין לך שום אפשרות לעדכן לכל אחד סיסמא אחרת בשאילתה אחת ולכן גם לא מריצים שאילתות כאלה בד"כ. לעומת זאת אם אתה צריך לעדכן למספר שורות במקביל נתון מסויים ,תאסוף את המזהה שלהם ואז בערת המתודה update תעדכן את כולם בפעימה אחת.

2.זה אומר שהאוביקט שמחזיק את הנתונים לא מתקשר ישירות עם המסד אלה משתמש במחלקה שהתפקיד שלה לבצע את הפעולות מול המסד.

בקישור שהבאתי יש דוגמא שמסבירה בדיוק את ההבדל.

avatar ענה משהה ב 10 למרץ 2015 #

1. הבנתי תודה :)
2. בעצם מה שזה אומר, לפי הקישור שהבאת, שבDM אני שומר אובייקטים חיצוניים ולא את האובייקט עצמו ? כאילו יש לי מחלקת DM שאיתה אני מבצע פעולות על המסד, אבל אני מקבל ומכניס אובייקטים חיצוניים כמו foo,user,tablee,chair, ומה שבא לי . ככה זה עובד ? או שאני צריך ליצור DM לכל אובייקט כמו בFooMapper?

avatar ענה Splash ב 13 למרץ 2015 #

הדרך הכי טובה היא פשוט לכתוב לבד ואתה כבר תבין,באמת שכל ההסברים נמצאים בקישור שהבאתי זה לא נושא כזה מורכב זה בסך הכל פטרן למימוש של העברת נתונים מאוביקט לשמירה